package part03_工厂模式.p04_抽象工厂模式;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**抽象工厂模式
 * 1-定义了一个接口interface用于创建相关或有依赖关系的对象，而不需要致命具体的类
 * 2-抽象工厂模式可以把简单工厂模式和工厂方法模式进行整合
 * 3-从设计层面看，抽象工厂模式就是对简单工厂模式的改进（或者称为进一步的抽象）
 * 4-把工厂抽象成两层，AbsFactory抽象工厂和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类
 * 这样把单个的简单工厂类变成了工厂簇，更利于代码的维护和扩展
 *
 * @ClassName: OrderPizza
 * @Author: AllenSun
 * @Date: 2019/12/5 19:41
 */
public class OrderPizza04 {

    AbsFactory factory;

    public OrderPizza04(AbsFactory factory){
        setFactory(factory);
    }

    private void setFactory(AbsFactory factory){
        Pizza04 pizza04=null;
        String orderType="";
        this.factory=factory;
        do {
            orderType=getType();
            pizza04=factory.createPizza(orderType);
            if(pizza04!=null){
                pizza04.prepare();
                pizza04.bake();
                pizza04.cut();
                pizza04.box();
                System.out.println("您点的"+pizza04.name+"披萨已经做好了，请慢用");
            } else {
                System.out.println("订购失败");
                break;
            }
        } while (true);
    }


    //写一个方法，可以获取客户希望订购的披萨种类
    private String getType(){
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入披萨的种类：");
            String str=strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
}

